QT中的自定义信号以及自定义函数

您所在的位置:网站首页 qt信号槽传递自定义结构体 pod QT中的自定义信号以及自定义函数

QT中的自定义信号以及自定义函数

2024-07-15 16:33| 来源: 网络整理| 查看: 265

信号与槽函数是QT的一大创新,通过自定义信号与槽函数可以实现自己想实现的功能。

标准的信号与槽写法如下:connect(&button,&QPushButton::clicked,this,&QWidget::close);

参数说明:

(1) &button :信号发出者,指针类型

(2)&QPushButton::clicked :处理的信号, &发送者的类名::信号名字 (不用加函数括号,只需要名字即可)这里说的是button的点击操作

(3) this : 信号接收者 ,指针类型 这里指的是当前窗口

(4)&QWidget::close :&接收者的类名::槽函数名字

自定义槽函数,

普通函数的用法,任意的成员函数,普通全局函数,静态函数都可以作为槽函数

槽函数需要和信号一致(参数,返回值)由于信号都是没有返回值,所以槽函数一般都没有返回值

自定义信号,信号必须有signals关键字来声明

信号没有返回值,但可以有参数,信号就是函数的声明,只需声明,无需定义

使用:emit (一般都是通过自定义槽函数发送信号出去)

 

来举例说明,建立一个窗口和另一个窗口,一个作为 父窗口,另一个作为 子窗口,每个窗口上面 设置按钮,发生点击信号响应当前窗口隐藏,另一个窗口显示。

1.项目目录如下:

2.代码文件:

Headers 头文件

(1)sonwidget.h文件:

#ifndef SONWIDGET_H #define SONWIDGET_H #include #include class Sonwidget : public QWidget { Q_OBJECT public: explicit Sonwidget(QWidget *parent = nullptr); QPushButton *button2; //自定义信号 signals: //信号没有返回值,可以有参数,信号函数不需要定义,只需要声明 void show_hide_singal(int a); //自定义槽函数 public slots: void emit_mysignal(); }; #endif // SONWIDGET_H

(2)widget.h文件

#ifndef WIDGET_H #define WIDGET_H #include #include "sonwidget.h" #include "QPushButton" class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); ~Widget(); //类成员变量 Sonwidget *sonwidget;//子窗口 QPushButton *button1;//按钮 //自定义的槽函数 public slots: void button_click1();//按钮响应的槽函数 void signal();//子窗口响应的槽函数 }; #endif // WIDGET_H

 

Sources文件

(1)main.cpp

#include "widget.h" #include int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }

(2)sonwidget.cpp文件

#include "sonwidget.h" #include "QPushButton" Sonwidget::Sonwidget(QWidget *parent) : QWidget(parent) { this->setWindowTitle("子窗口"); //设置按钮 button2=new QPushButton("显示父窗口,隐藏子窗口",this); //设置连接,子窗口,子窗口的信号为按钮的点击响应,槽函数为父窗口的自定义函数 connect(button2,&QPushButton::clicked,this,&Sonwidget::emit_mysignal); } void Sonwidget::emit_mysignal(){ //点击按钮的函数 emit show_hide_singal(10); }

(3)widget.cpp文件

#include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) { //父窗口设置标题 this->setWindowTitle("父窗口"); //设置当前窗口的子窗口 this->sonwidget=new Sonwidget; //显示子窗口 sonwidget->show(); //设置按钮 button1=new QPushButton("显示子窗口,隐藏父窗口",this); //设置连接,父窗口上的按钮。信号为点击按钮,槽函数为父窗口的自定义函数 connect(button1,&QPushButton::clicked,this,&Widget::button_click1); //设置连接,子窗口,子窗口的信号,槽函数为父窗口的自定义函数 connect(sonwidget,&Sonwidget::show_hide_singal,this,&Widget::signal); } //设置按钮连接的槽函数 void Widget::button_click1(){ //父窗口隐藏 this->hide(); //子窗口显示 this->sonwidget->show(); } //设置子窗口连接的槽函数 void Widget::signal(){ //父窗口显示 this->show(); //子窗口隐藏 this->sonwidget->hide(); } //类析构函数 Widget::~Widget() { }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3